CloudFront配下のWEBページをAWS WAFを使ってメンテナンスページを表示する
こんにちは、いわもんです。
すっかり秋です、あっという間に10月です。
さて、早速ですが、
やりたい事
WEBサイトのメンテナンスを行う際に、メンテナンス時間はメンテナンスページの表示を行う場合があると思います。
その際、CloudFront配下のWEBサイトでは、CloudFrontでOriginの入れ替えや、
オリジン側でメンテナンスページへ差し替えなどの作業が発生しますが、割と手間な作業です。
また、メンテナンス中でも動作検証などのため特定IPからの接続は許可するなどの設定も必要な場合があります。
そこで、より簡単にメンテナンスページの表示し、メンテナンス中はの特定IPからのみの接続を許可する設定方法です。
概要
まず構成です。
構成の概要
- 前段にCloudFront
- メインコンテンツ(behaviorのDefault)のオリジンにはALB配下のEC2を用いる
- メンテナンスページを表示するためS3バケットもオリジンとして利用
- AWS WAFをALBに適用する
やってみる
S3
- Sorry用のコンテンツを設置するバケットを作成
- バケットに
/sorry/mainte.html
を設置
CloudFront
Origins
- Sorryサーバー用のS3バケットをオリジンとして追加
Behaviors
sorry/*
を追加し、オリジンを(Sorry用の)S3バケットに指定
Error Pages
- Create Custom Error Responseにて
403
指定 - Customize Error Responseを
Yes
- Response Page Path を
/sorry/mainte.html
に指定 - HTTP Response Code を
200
に指定
AWS WAF
- Create web ACLにてALCを作成
Name web ACL
- AWS resource to associateにてCloudFrontのオリジンに指定しているALBを選択
Create conditions
- String match conditionsにて
Create condition
を選択する - Part of the request to filter onにて
Header
を選択 - Headerには
X-Forwarded-For
を直接入力する。 - Match typeにて
Conteins
を選択 - Transformationは
None
を選択 - Value to matchにて
許可したいIPアドレス
を記載します。
Create rules
- Rule typeにて
RegulerRule
を選択します。 - Add conditionsを選択
- When a request
does
とmatch at least one of the filters in the string match condition
を選択し作成済みcondition
を選択する
- When a request
- Rules
作成したRule
を選択- Actionは
Allow
を選択 - Default actionは
Block all requests that don't match any rules
とします。
- Confirm and createにてルールが作成されます。
メンテナンスの解除
- Web ACLs より対象のルールを選択
- Rulesタブから
AWS resources using this web ACL
にある割当ELBを削除することで解除できます。
解説
CloudFrontとS3
- CloudFrontのCustomize Error Responseを用いたSorryページの表示と同じ仕組みでメンテナンスページを表示させます。
- 参考:CloudFrontのCustom Error Responseを利用して、S3上にあるSorryページを表示する
- その際、ELBでは
403
エラーが出力されますが、あくまでもメンテナンス画面のため クライアント側へ返すレスポンスコードはCustomize Error Responseの設定にて200
に差し替えます。
AWS WAF
- AWS WAFにて特定のIPを許可します。
- CloudFront配下となるため、ELBへの接続もとのIPは全てCloudFrontのエッジサーバーとなります。
- Headerの
X-Forwarded-For
の値を見ることで、各クライアントのIPアドレスが判別で、AWS WAFにて特定のIPに対し接続許可を行うことができます。
今日のわさび様
わさびさん、秋になってでかくなった?